import java.util.*;
public class test2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入物质的化学式：");
        String Str = scanner.nextLine();

        Map<String, Integer> map = getMap(Str);
        System.out.println("元素数量如下：");
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
    public static Map<String, Integer> getMap(String Str) {
        Map<String, Integer> map = new LinkedHashMap<>();

        for (int i = 0; i < Str.length(); ) {
            char ch = Str.charAt(i);
            if (Character.isUpperCase(ch)) {
                int count = 0;
                i++;
                StringBuilder sb = new StringBuilder();
                sb.append(ch);
                while (i < Str.length() && Character.isLowerCase(Str.charAt(i))) {
                    sb.append(Str.charAt(i));
                    i++;
                }
                while (i < Str.length() && Character.isDigit(Str.charAt(i))) {
                    count = count * 10 + (Str.charAt(i) - '0');
                    i++;
                }
                count = (count == 0) ? 1 : count; // 将计数器初始化为1
                map.put(sb.toString(), map.getOrDefault(sb.toString(), 0) + count);
            }
//            else if (ch == '(') {
//                int j = Str.indexOf(')', i + 1);
//                int count = 1;
//                if (j + 1 < Str.length() && Character.isDigit(Str.charAt(j + 1))) {
//                    int k = j + 1;
//                    while (k < Str.length() && Character.isDigit(Str.charAt(k))) {
//                        count = count * 10 + (Str.charAt(k) - '0');
//                        k++;
//                    }
//                }
//                Map<String, Integer> subMap = getMap(Str.substring(i + 1, j));
//                for (Map.Entry<String, Integer> entry : subMap.entrySet()) {
//                    map.put(entry.getKey(), map.getOrDefault(entry.getKey(), 0) + entry.getValue() * count);
//                }
//                i = j + 1;
//            }else {
//                i++;
//            }
        }
        return map;
    }
}